package com.goldman.oss.common.platform;


import com.goldman.oss.common.internal.pojo.CommonFileWrapper;
import com.goldman.oss.common.internal.pojo.DownloadFileInfo;
import com.goldman.oss.common.internal.pojo.MultipartFileWrapper;
import com.goldman.oss.common.internal.pojo.UploadFileInfo;

import java.io.InputStream;
import java.util.function.Consumer;


public interface FileStorage extends AutoCloseable {

    /**
     * 获取业务编码
     *
     * @return 业务编码
     */
    String getBusinessCode();

    /**
     * 设置业务编码
     *
     * @param businessCode 业务编码
     */
    void setBusinessCode(String businessCode);

    /**
     * 上传文件
     *
     * @param fileWrapper 文件属性包装
     * @return 上传结果
     */
    UploadFileInfo store(MultipartFileWrapper fileWrapper);

    /**
     * 上传普通文件
     *
     * @param commonFileWrapper
     * @return
     */
    UploadFileInfo store(CommonFileWrapper commonFileWrapper);

    /**
     * 获取文件临时访问URL
     *
     * @param downloadFileInfo 下载文件的属性
     * @return URL
     */
    String generateTemporaryUrl(DownloadFileInfo downloadFileInfo);

    /**
     * 生成公共路径
     *
     * @param objectKey
     * @return
     */
    String generatePublicUrl(String objectKey);

    /**
     * 下载文件
     *
     * @param downloadFileInfo 下载文件的属性
     * @param consumer         提供一个消费者，调用方自由处理文件流
     */
    void download(DownloadFileInfo downloadFileInfo, Consumer<InputStream> consumer);

    /**
     * 下载文件
     *
     * @param downloadFileInfo 下载文件的属性
     * @return 流
     */
    InputStream download(DownloadFileInfo downloadFileInfo);

}
